import path from 'path'
import webpack from 'webpack'
import { merge } from 'webpack-merge'
import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer'
import CopyPlugin from 'copy-webpack-plugin'

import baseConfig from './webpack.config.base'

const devtoolsConfig = process.env.DEBUG_PROD === 'true' ? {
  devtool: 'source-map',
} : {}

const rootPath = path.join(__dirname, '../../')

const config = merge(baseConfig, {
  ...devtoolsConfig,

  mode: 'production',

  target: 'electron-main',

  entry: './src_main/main.dev.ts',

  output: {
    path: path.join(rootPath, './dist'),
    filename: 'main.prod.js',
  },

  module: {
    rules: [

      {
        test: /\.node$/,
        use: 'node-loader',
      },

    ],
  },

  plugins: [
    new BundleAnalyzerPlugin({
      analyzerMode:
        process.env.OPEN_ANALYZER === 'true' ? 'server' : 'disabled',
      openAnalyzer: process.env.OPEN_ANALYZER === 'true',
    }),

    /**
     * Create global constants which can be configured at compile time.
     *
     * Useful for allowing different behaviour between development builds and
     * release builds
     *
     * NODE_ENV should be production so that modules do not perform certain
     * development checks
     */
    new webpack.EnvironmentPlugin({
      NODE_ENV: 'production',
      DEBUG_PROD: false,
      START_MINIMIZED: false,
    }),

    new CopyPlugin({
      patterns: [
        path.join(rootPath, './src_main/package.json'),
        path.join(rootPath, './src_main/preload.js'),
      ],
    }),
  ],

  externals: [],

  /**
   * Disables webpack processing of __dirname and __filename.
   * If you run the bundle in node.js it falls back to these values of node.js.
   * https://github.com/webpack/webpack/issues/2010
   */
  node: {
    __dirname: false,
    __filename: false,
  },
})

export default config
